package com.pingan.haofang.searchcloud.collection.service;

import com.pingan.haofang.searchcloud.collection.domain.Collection;
import com.pingan.haofang.searchcloud.index.domain.Index;
import com.pingan.haofang.searchcloud.metadata.domain.Metadata;

import java.util.List;
import java.util.Optional;

/**
 * 索引Collection Service接口
 *
 * @author baojie371
 * @date 17/5/11
 * @since 1.0.0
 */
public interface CollectionService {

    /**
     * 获取Collection
     *
     * @param index
     * @return
     */
    Optional<Collection> getCollection(Index index);

    /**
     * 获取Collection，如果Collection不存在，则创建
     *
     * @param index
     * @param metadata
     * @param collectionName
     * @return
     */
    Collection getOrCreateCollection(Index index, Metadata metadata, String collectionName);

    /**
     * 注册Collection
     *
     * @param index
     * @param collectionName
     */
    void registerCollection(Index index, String collectionName);

    /**
     * 清理Solr里旧的Collections，删除days天前，并且没有启用的collection
     *
     * @param indexId
     * @param engineType
     * @param topN
     * @return
     */
    List<Long> clearOldCollectionsOfStorage(long indexId, int engineType, int topN);

    /**
     * 清理DB里旧的Collections，删除days天前，并且没有启用的collection
     *
     * @param collectionIds
     * @return
     */
    void clearOldCollectionsOfDb(List<Long> collectionIds);

    /**
     * 查询collectionName对应的indexName(数据库存在)
     *
     * @param collectionName
     * @return
     */
    Index getIndexNameOfCollection(String collectionName) ;
}
